'''
【问题描述】
给定一个括号序列，要求尽可能少地添加若干括号使得括号序列变得合法，当添加完成后，会产生不同的添加结果，请问有多少种本质不同的添加结果。两个结果是本质不同的是指存在某个位置一个结果是左括号，而另一个是右括号。
例如，对于括号序列(（（）,只需要添加两个括号就能让其合法，有以下几种不同的添加结果：（）（）（）、（）(（）)、(（）)（）、(（）（）)和(（（）））。
【输入格式】
输入一行包含一个字符串s,表示给定的括号序列，序列中只有左括号和右括号。
【输出格式】
输出一个整数表示答案，答案可能很大，请输出答案除以1000000007(即1 0 9 10^910
9+7)的余数。
【样例输入】
（（（）
【样例输出】
5
'''

# def func():
#     dp = [[0 for i in range(n + 2)] for i in range(n + 1)]
#     dp[0][0] = 1
#     for i in range(1,n+1):
#         if s[i - 1] == '(':
#             for j in range(1,n +1 ):
#                 dp[i][j] = dp[i-1][j-1]
#         else:
#             dp[i][0] = dp[i -1][j -1]
#             for j in range(1,n+1):
#                 dp[i][j] = dp[i][j-1] + dp[i-1][j+1]
#
#     for i in range(1,n+1):
#         if dp[i][j] :
#             return dp[n][i]
#
# s = list(input())
# n = len(s)
# mod = 10 **9 + 7
# left = func()  # 从左看计算
# s.reverse()
# for i in range(n):
#     if s[i] == ')':
#         s[i] = '('
#     else:
#         s[i] = ')'
# right = func()
# print(left * right % mod)